iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

文章同步發表至 Medium

前幾篇簡單講解了幾個套件對 Shapefile 的操作之後,接下來要進入到 Shapefile 的實作了。第一個練習,我們要使用的是政府資料開放平臺中,休閒旅遊分類裡面所提供的資料,包含景點民宿旅館餐飲活動四個部分,以及鄉鎮市區界線,來做出一個簡單的網頁,可以利用縣市鄉鎮搜尋對應的景點、查詢景點附近的住宿和餐廳等等。由於我擅長的並不是前端,所以文章內容會比較多著墨在後端和資料庫的處理上。

將 Shapefile 資料儲存到資料庫

我們現有的資料來源都是實體檔案,如果每發送一次 API 就要讀取一次檔案是一個很不實用的作法,除了速度較慢之外,還有可能造成檔案被其他個 request 咬住。因此,我提供的解決辦法是寫一個 Console App,把檔案的內容存到資料庫,如果有需要的話也能調整成排程,彈性較大。

套件版本

以下是將匯入資料這支 Console App 會需要用到的套件清單,如果有遇到其他問題,也有可能是套件更新過,可以先試著把版本調降看看。

套件名稱 版本 說明
EntityFrameworkCore 6.0.8 使用 EF Core 來操作資料庫
EntityFrameworkCore.Design 6.0.8 使用 EF Core DB First 模式時需要用到
Npgsql.EntityFrameworkCore.PostgreSQL 6.0.6 PostgreSQL EF Core 的套件
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite 6.0.6 可以接 Geometry 欄位的資料
NetTopologySuite.Features 2.1.0 讀取檔案時使用

先別急著存到資料庫裡

還記得我們之前所說的座標系統嗎?PostgreSQL 裡面可以存 Geometry 的格式,自然也就會存到座標系統的值。因此,在我們把檔案放入資料庫之前,先檢查一下五個檔案的座標格式。

前端套件會選用 Leaflet,工作上也都是接觸這個套件,而他在官方文件中的範例,底圖都是 OSM OpenStreeMap,所以需要先研究一下 OSM 所使用的座標系統是甚麼。

而根據這篇文章的說明:

  • EPSG:4326:大地基準
  • EPSG:3857:以 WGS84 大地基準為底的投影座標系統

因為是平面的地圖所以必須經過投影,因此 OSM 使用的是 EPSG:3857,但根據 3857 的數值較大,所佔用的儲存空間也是,所以基本上會存 4326,再轉換成 3857 進行操作。

不過從這篇文章的回答中可以看出,Leaflet 很貼心的會幫你做轉換,預設只要輸入經緯度座標即可,所以下載回來的檔案都不需要進行座標轉換喔。

References


上一篇
你好,我是 PostgreSQL - 5 Npgsql With .NET Framework
下一篇
旅遊規劃小專案 1 - 匯入資料
系列文
歡迎來到 GIS 的世界!30 天從後端開始學 GIS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言